package no.sachmuld.methodcombination.examples.annotation.aopstyle.foo;

import no.sachmuld.methodcombination.api.MethodCombinationSupport;
import no.sachmuld.methodcombination.api.CrosscuttingBehaviour;
import no.sachmuld.methodcombination.api.annotation.Crosscutting;
import no.sachmuld.methodcombination.api.annotation.UsesMethodCombination;
import no.sachmuld.methodcombination.api.annotation.MethodCombinationException;

/**
 *
 */
@UsesMethodCombination(FooBehaviour.class)
public abstract class Foo extends MethodCombinationSupport<CrosscuttingBehaviour> {

    @Crosscutting
    final public String bar(int i) {
        throw new MethodCombinationException();
    }

    @Crosscutting
    final public String baz(int i) {
        throw new MethodCombinationException();
    }

    @Override
    public Foo with(CrosscuttingBehaviour... behaviours) {
        super.with(behaviours);
        return this;
    }

}
